package com.unicom.office.parser;

import com.unicom.office.func.*;
import com.unicom.office.node.OfficeNode;

public class preHandle {
    public static void handle(OfficeNode officeNode, FuncCommon func){
        OfficeNode parent = (OfficeNode) officeNode.getParent();
        while (parent != null){
            if(parent.getType() == func.getType()) {
                if(func instanceof ProcNode) {
                    parent.addProc((ProcNode)func);
                }else {
                    trans(parent, (FuncBase) func);
                }
                return;
            }
            parent = (OfficeNode)parent.getParent();
        }
    }

    private static void trans(OfficeNode officeNode, FuncBase funcBase){
        if(funcBase instanceof IfFunc){
            ((IfFunc)funcBase).setTrueBody(officeNode);
        }else if(funcBase instanceof ForFunc){
            ((ForFunc)funcBase).setBody(officeNode);
        }
        // 提升其实就是意味着，将当前节点与父节点兑换位置。
        OfficeNode parent = (OfficeNode) officeNode.getParent();
        if(parent != null){
            int i = parent.getChildren().indexOf(officeNode);
            parent.getChildren().set(i, funcBase);
        }else{
            // 没有父节点意味着当前节点是根节点了，那就指定一下父子关系咯
            officeNode.setParent(funcBase);
        }
    }
}
